#include "net/netglobal.h"
#include "pkg.h"

bool Init_zmq(){
    // net监听，准备连接master
    g_zmq0.Initialize("../Ipc/master.ipc", ZMQ_PAIR, true);
    if(!g_zmq0.RegisterRecvCallback(DealRPCFromLogic)) return false;
    if(!g_zmq0.StartBind()) return false;
    if(!g_zmq0.StartWorkCycle()) return false;

    // net监听，准备连接game
    g_zmq1.Initialize("../Ipc/game.ipc", ZMQ_PAIR, true);
    if(!g_zmq1.RegisterRecvCallback(DealRPCFromLogic)) return false;
    if(!g_zmq1.StartBind()) return false;
    if(!g_zmq1.StartWorkCycle()) return false;

    return true;
}

/**
 * 接收来自master进程的RPC消息
 * @param data 消息内容（二进制字符串）
 * @param size 消息长度（实际没用）
 */
void DealRPCFromLogic(const char* data, size_t& size){
    // 1.分析数据，获得到相应的套接字
    std::unordered_map<std::string, std::string> msg;
    if(UnPackFromLua(data, msg)){
        int vfd = atoi(msg["vfd"].c_str()); // 失败返回0
        if(vfd != 0){
            // 解析出套接字后，将数据发送给对应客户端(需要重新打包)
            std::string newMsg = Pack2Lua(msg);
            // ToDO: 封装包头+包体，校验和等逻辑，还要发送给客户端
        } 
    }
    Log_Info(0, "net进程处理转发一个业务进程的消息失败!!");
    delete[] data;
}